import pandas as pd
from LDA_visualize_ReadModels import ReadModels


threshold = 0.33
def simplify(x):
    """
    阈值设定
    """
    if x > threshold:
        return(x)
    else:
        return(0)

def sort_bythreshold_w_topic(m):    
    ms = m.applymap(simplify).sort_values(by=list(m.columns), ascending=False)
    m = m.loc[ms.index, ms.columns]
    m_主题 = m.copy()  
    m_主题.columns = ["主题"+str(x) for x in m_主题.columns ]
    m_主题
    return(m_主题)
    
def process_N (m_data_set,N):
    """
    对单一模型进行数据处理，生成带编号的数字矩阵，并进行矩阵排序
    包含标题对主题的相关度,集团对主题的相关度
    """
    号_题 = m_data_set[N]["excel"]["dtl4_{N}".format(N=N)]
    号_集团 = m_data_set[N]["excel"]["dtl2_{N}".format(N=N)]
    ordered_col = list(号_题.sum().sort_values(ascending=False).index.values)
    号_题 = sort_bythreshold_w_topic(号_题[ordered_col])
    号_集团 = sort_bythreshold_w_topic(号_集团[ordered_col])
    return(号_题, 号_集团)

def All_df(m_data_set,N_min,N_max):
    全 = list()
    for N in range(N_min,N_max):
        号_题, 号_集团 = process_N(m_data_set,N)
        全.append ({"N":N, "号_题":号_题, "号_集团":号_集团} ) 
    全df = pd.DataFrame(全).set_index("N")
    return 全df

def Part_data(全df,N,kind):
    """
    N 为第几个模型，范围：4~12 类型int
    kind可选"号_题"、"号_集团" 类型str
    """
    N_df = 全df.loc[N][kind]
    return N_df

if __name__ == '__main__':
    simplify()
    sort_bythreshold_w_topic()
    process_N()
    All_df()
    Part_data()